package cn.teduymdj.jxc.service;



import cn.teduymdj.jxc.pojo.dto.*;
import cn.teduymdj.jxc.pojo.entity.SaleList;
import cn.teduymdj.jxc.pojo.entity.SaleListGoods;
import cn.teduymdj.jxc.pojo.vo.SaleListCountListItemVO;
import cn.teduymdj.jxc.pojo.vo.SaleListGoodsListItemVO;
import cn.teduymdj.jxc.pojo.vo.SaleListListItemVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 销售商品service接口
 *
 */
@Transactional
public interface SaleListGoodsService {
	
	/**
	 * 保存商品销售清单，商品销售列表，修改商品属性
	 * @param saleListAddNewDTO 商品销售单
	 * @param saleListGoodsAddNewDTOList 商品销售列表
	 */
	public void save(SaleListAddNewDTO02 saleListAddNewDTO);
	
	/**
	 * 销售单查询
	 * @param saleNumber 单号
	 * @param customerId 客户ID
	 * @param state 付款状态
	 * @param sTime 开始时间
	 * @param eTime 结束时间
	 * @return
	 */
	public List<SaleListListItemVO> getSalelist(String saleNumber, String customerId, String state, String sTime,
												String eTime);
	
	/**
	 * 根据销售单ID查询销售商品信息
	 * @param saleListId 销售单ID
	 * @return
	 */
	public List<SaleListGoodsListItemVO> getSaleListGoodsBySaleListId(Long saleListId);
	
	/**
	 * 删除销售单及销售单商品信息
	 * @param saleListId 销售单ID
	 */
	public void delete(Long saleListId);
	
	/**
	 * 根据销售单ID查询销售单信息
	 * @param saleListId 销售单ID
	 * @return
	 */
	public SaleList getSaleList(Long saleListId);
	
	/**
	 * 根据商品ID查询销售的商品数量
	 * @param goodsId 商品ID
	 * @return
	 */
	public Integer getSaleTotalByGoodsId(Long goodsId);
	
	/**
	 * 修改销售单付款状态
	 * @param state 1：已付 2：未付
	 * @param id 销售单ID
	 */
	public void updateState(Integer state ,Long id);
	
	/**
	 * 根据销售单ID条件查询销售商品信息
	 * @param saleListId 销售单ID
	 * @param goodsTypeId 商品类别ID
	 * @param codeOrName 商品编码或名称
	 * @return 
	 */
	public List<SaleListGoods> getSaleListGoodsBySaleListId(Long saleListId, Long goodsTypeId, String codeOrName);
	
	/**
	 * 按日统计销售情况
	 * @param sTime 开始时间
	 * @param eTime 结束时间
	 * @return
	 */
	public List<Object> getSaleDataByDay(String sTime,String eTime);
	
	/**
	 * 按月统计销售情况
	 * @param sTime
	 * @param eTime
	 * @return
	 */
	public List<Object> getSaleDataByMonth(String sTime,String eTime);


	/**
	 * 修改销售单付款状态为已支付
	 *
	 * @param id 进货单ID
	 * @return
	 */
	void setPaid(Long id);
	/**
	 * 修改销售单付款状态为未支付
	 *
	 * @param id 进货单ID
	 * @return
	 */
	void setUnpaid(Long id);

	List<SaleListCountListItemVO> getSaleListGoodsByCondition(SelectReturnCondition selectReturnCondition);
}
